package com.qf.task;


import com.qf.dao.RedioRespository;
import com.qf.pojo.Redios;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
public class MvShareTask {
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    RedioRespository redioRespository;
    String key1 = "MV_KEY_SCORE";
    //cron 表达式 执行的时间
   @Scheduled(cron = "0 * * * * ?")
    //执行的方法
    public void tastTest(){
        Set<String> range = redisTemplate.opsForZSet().range(key1, 0, -1);
        Iterator iterator = range.iterator();
        while (iterator.hasNext()){
            synchronized (this){
                Optional<Redios> byId = redioRespository.findById(Integer.valueOf(iterator.next().toString()));
                Double score = redisTemplate.opsForZSet().score(key1,Integer.valueOf(iterator.next().toString()));
                Redios redios = byId.get();
                redios .setGood(score);
                //如果拥有，则更改购物车中的数量//对obj转为jsonstring
//            String s = JSONObject.toJSONString(iterator.next());
//            Redios redios = JSONObject.parseObject(s, Redios.class);
//            Double score = redisTemplate.opsForZSet().score(key1, redios);
//            redios.setGood(score);
                //存入数据库
                redioRespository.saveAndFlush(redios);
            }

        }


//       //使用redis分布式锁，进行加索，让定时 任务在多台服务器的情况下，只执行一次
//        //1.设置加锁 没有的情况下 会返回true,如果已经有了该key值则返回false
//        Boolean task = redisTemplate.opsForValue().setIfAbsent("task", 1);
//        //2.设置该锁的过期时间，防止死锁
//        redisTemplate.expire("task",30*60, TimeUnit.MINUTES);
//        if (!task){
//            System.out.println("没有争抢到锁");
//            return;
//        }
//        //3.争抢到锁后 执行的逻辑
//        Boolean num = redisTemplate.hasKey("num");
//        if (num){
//            Object num1 = redisTemplate.opsForValue().get("num");
//            //对原来的值加1后再存入到redis中
//            redisTemplate.opsForValue().set("num",Integer.valueOf(num1.toString())+1);
//            System.out.println(Integer.valueOf(num1.toString())+1);
//        }else{
//            redisTemplate.opsForValue().set("num",0);
//        }
//        //4.执行完业务逻辑后  释放锁资源，让其他的线程去争抢锁资源
//        redisTemplate.delete("task");
    }

}
